package vargapeter.bet.server;

import java.rmi.Remote;
import java.rmi.RemoteException;

/**
 * RMI interface.
 * A fogadóirodák ezzel az interface-el tudnak kommunikálni a klienseikkel.
 * A metódusok bitosítják a fogadó -> fogadóiroda és az esemény -> fogadóiroda kommunikációt.
 * Mivel az rmi csak metódushívásokkal tud kommunikálni a kliensekkel, nem tud visszafelé üzeneteket küldeni, 
 * ebben az interface-ben megtalálható az isWon metódus, amit a klienseknek valamilyen időközönként le kell kérdezniük,
 * hogy megtudják nyertek-e.
 */
public interface BookmakerRemote extends Remote {
	/**
	 * Ha elindul egy sportesemény így regisztrálhatja magát, a neve és az odds-ok megadásával.
	 *
	 * @param name
	 * @param home
	 * @param away
	 * @param draw
	 * @throws RemoteException
	 */
	void eventReleased(String name, int home, int away, int draw) throws RemoteException;
	
	/**
	 * Ha véget ér egy sportesemény, akkor ezt jelezheti ezzel a metódussal.
	 * Szükséges megadnia a nevét, illetve a kimenetelt.
	 * 
	 * @param name
	 * @param outcome
	 * @throws RemoteException
	 */
	void eventEnded(String name, String outcome) throws RemoteException;
	
	/**
	 * Ezzel a metódussal kérhetik le a fogadók a már regisztrált sporteseményeket.
	 * 
	 * @return A sportesemények neveinek listája.
	 * @throws RemoteException
	 */
	String[] sportEvents() throws RemoteException;
	
	/**
	 * A fogadó lekérheti a paraméterben megadott esemény minden kimenetelének odds-át.
	 * @param eventName
	 * @return Az adott odds-ok tömbje, home, away, draw sorrendben.
	 * @throws RemoteException
	 */
	int[] odds(String eventName) throws RemoteException;
	
	/**
	 * A fogadó fogadhat egy eseményre a saját nevének, az esemény nevének, a kimenetel és az összeg megadásával.
	 * @param betterName
	 * @param eventName
	 * @param outcome
	 * @param sum
	 * @throws RemoteException
	 */
	void bet(String betterName, String eventName, String outcome, int sum) throws RemoteException;
	
	/**
	 * A fogadók ezzel a metódussal tudják lekérni, hogy nyertek-e valamit. 
	 * Socket-ekkel nem lenne erre szükség, azonban az RMI nem tud visszafelé kommunikálni a klienseknek. 
	 * 
	 * @param betterName
	 * @return A myeremény összege. 
	 * @throws RemoteException
	 */
	int isWon(String betterName) throws RemoteException;
}
